package cn.demoncat.util.lang;

import cn.demoncat.util.lang.constant.CharsetConstant;
import cn.demoncat.util.lang.constant.StringConstant;
import com.github.stuxuhai.jpinyin.ChineseHelper;
import org.apache.commons.lang3.StringUtils;

import java.io.UnsupportedEncodingException;
import java.util.Random;

/**
 * 汉字工具
 * 
 * @author 延晓磊
 *
 * @since 2019年9月10日
 */
public class ChineseUtil {

	/**
	 * 判断字符串中是否包含汉字
	 * 
	 * @param str
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年9月10日
	 */
	public static boolean has(String str) {
		if (StringUtils.isBlank(str)) {
			return false;
		}
		return ChineseHelper.containsChinese(str);
	}

	/**
	 * 判断字符串中是否包含繁体汉字
	 * 
	 * @param str
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年9月10日
	 */
	public static boolean hasBig(String str) {
		if (StringUtils.isBlank(str)) {
			return false;
		}
		for (char c : str.toCharArray()) {
			if (ChineseHelper.isTraditionalChinese(c)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 判断字符串是否纯汉字
	 * 
	 * @param str
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年9月10日
	 */
	public static boolean isAll(String str) {
		if (StringUtils.isBlank(str)) {
			return false;
		}
		for (char c : str.toCharArray()) {
			if (!ChineseHelper.isChinese(c)) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 转换为繁体字
	 * 
	 * @param str
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年9月10日
	 */
	public static String toBig(String str) {
		if (StringUtils.isBlank(str)) {
			return StringConstant.EMPTY;
		}
		return ChineseHelper.convertToTraditionalChinese(str);
	}

	/**
	 * 转换为简体字
	 * 
	 * @param str
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年9月10日
	 */
	public static String toSimple(String str) {
		if (StringUtils.isBlank(str)) {
			return StringConstant.EMPTY;
		}
		return ChineseHelper.convertToSimplifiedChinese(str);
	}

	/**
	 * 随机简体汉字
	 * 
	 * @param size	字数
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年9月19日
	 */
	public static String getChinese(int size) {
		StringBuilder sd = new StringBuilder();
		int highPos, lowPos;
		byte[] b = new byte[2];
		for (int i = 0; i < size; i++) {
			// 获取高位值
			highPos = (176 + Math.abs(new Random().nextInt(39)));
			// 获取低位值
			lowPos = (161 + Math.abs(new Random().nextInt(93)));
			b[0] = new Integer(highPos).byteValue();
			b[1] = new Integer(lowPos).byteValue();
			try {
				sd.append(new String(b, CharsetConstant.GBK));
			} catch (UnsupportedEncodingException ex) {
				// 无操作
			}
		}
		return sd.toString();
	}
}
